package com.yiwenup.struct._01_linear.base;

import com.yiwenup.struct._01_linear.Main;

/**
 * 线性表父类
 */
public interface List<E> {

    /**
     * 清空所有元素
     */
    void clear();

    /**
     * 元素的数量
     *
     * @return 元素的数量
     */
    int size();

    /**
     * 判断是否为空
     *
     * @return 是否为空
     */
    boolean isEmpty();

    /**
     * 是否包含元素
     *
     * @param ele 元素
     * @return 检查结果
     */
    boolean contains(E ele);

    /**
     * 在数组尾部插入一个元素
     *
     * @param ele 待处理元素
     */
    void add(E ele);

    /**
     * 获取idx位置的元素
     *
     * @param idx 索引位置
     * @return 元素
     */
    E get(int idx);

    /**
     * 在idx位置设置元素为ele
     *
     * @param idx 索引位置
     * @param ele 元素
     * @return 之前的元素
     */
    E set(int idx, E ele);

    /**
     * 在idx位置插入一个元素
     *
     * @param idx 索引位置
     * @param ele 元素
     */
    void insert(int idx, E ele);

    /**
     * 删除idx位置的元素
     *
     * @param idx 索引位置
     * @return 被删除的元素
     */
    E remove(int idx);

    E remove(E ele);

    /**
     * 查看索引位置
     *
     * @param ele 元素
     * @return 索引位置
     * {@link Main#main(String[])}
     */
    int indexOf(E ele);

}
